package gogoqiu.plugin;

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/*
 * /mnt/data/init/git_spsp/nodejs2/dev-tools/src/lib.ts
 * translate from "dev-tools/src/main.ts"
 * prepack 
 */
public class VersionUpdaterUtils {


    /**
     * 处理子版本号更新
     * @param s 版本号字符串
     * @param added 是否需要递增
     * @return 更新后的版本号
     */
    private static int updateMinionVersion(String s, boolean added) {
        int num = Integer.parseInt(s);
        if (added) {
            num++;
        }
        if (num < 100) {
            return num + 1;
        }
        return 0;
    }

    /**
     * 更新完整版本号
     * @param oldVersion 旧版本号
     * @return 新版本号
     */
    public static String updateVersion(String oldVersion) {
        String[] parts = oldVersion.split("\\."); // 注意转义正则中的点
        List<String> partList = new ArrayList<>();
        Collections.addAll(partList, parts);
        Collections.reverse(partList); // 反转列表

        boolean added = false;
        boolean updated = false;
        List<String> updatedParts = new ArrayList<>();

        for (String part : partList) {
            if (updated) {
                updatedParts.add(part);
                continue;
            }

            int v = updateMinionVersion(part, added);
            if (v != 0) {
                updated = true;
            } else {
                added = true;
            }
            updatedParts.add(String.valueOf(v));
        }

        Collections.reverse(updatedParts); // 恢复顺序
        return String.join(".", updatedParts);
    }

    /**
     * 更新control文件中的版本号
     * @param version 新版本号
     * @throws IOException 处理文件时可能抛出的异常
     */
    public static void updateControl(String version) throws IOException {
        //outputInfo("--updateControl--");
        String filePath = "debian-tmp/DEBIAN/control";
        
        // 检查文件是否存在
        if (!Files.exists(Paths.get(filePath))) {
            //outputWarn("file not exists: " + filePath);
            return;
        }

        // 读取文件内容
        String data = new String(Files.readAllBytes(Paths.get(filePath)));

        // 替换版本号（使用正则匹配）
        Pattern pattern = Pattern.compile("(Version:\\s*)\\S+");
        Matcher matcher = pattern.matcher(data);
        String updatedContent = matcher.replaceFirst("$1" + version);

        // 写入更新后的内容
        Files.write(Paths.get(filePath), updatedContent.getBytes());
    }

    
}
